#include <bits/stdc++.h>
#define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 200+5;
bool vis[maxn][maxn];
int lim[3], D, ans[maxn];
struct Node{
    int w[3];
    int p;
    bool operator < (const Node &r)const{
        return this->p > r.p;
    }
//    Node(int a=0, int b=0, int c=0, int w = 0):w[0](a), w[1](b), w[2](c), p(w){}
};


void init(){
    Fill(vis, false);
    Fill(ans, -1);
}


void bfs(){
    Node star;
    star.p = 0;
    star.w[0] = star.w[1] = 0; star.w[2] = lim[2];
    priority_queue<Node> pq;
    init();
    pq.push(star); vis[0][0] = true;
    while(!pq.empty()){
        Node t = pq.top(); pq.pop();
        for(int i : t.w){
            if(i<=D){
                if(ans[i]<0 || ans[i]>t.p) ans[i] = t.p;
            }
        }
        if(ans[D]>=0) break;
        for (int i = 0; i < 3; ++i)
            for(int j=0; j<3; ++j) if(i!=j){
                int pour = min(lim[j], t.w[i]+t.w[j]) - t.w[j];
                if(pour>0){
                    Node tmp = t;
                    tmp.w[i] -= pour; tmp.w[j] += pour;
                    tmp.p += pour;
                    if(!vis[tmp.w[0]][tmp.w[1]]) {
                        pq.push(tmp);
                        vis[tmp.w[0]][tmp.w[1]] = true;
                    }
                }
            }
    }
    while(ans[D] < 0) --D;
    cout << ans[D] << ' ' << D << "\n";
}
int main() {
    //ios_base::sync_with_stdio(false);cin.tie(nullptr);
    int T;
    cin >> T;
    while(T--){
        for(int i=0; i<3;++i) cin >> lim[i];
        cin >> D;

        bfs();
//        if(T) cout << "\n";
    }
    return 0;
}